const {createServer} = require("http");
const {Server} = require("socket.io");
const httpServer = createServer((req, res) => {
    res.end("hello world")
});
// 存储所有用户信息
const userList = [];

const io = new Server(httpServer, {
    cors: {
        origin: "*",
        methods: ["GET", "POST"]
    },
    connectionStateRecovery: {
        maxDisconnectionDuration: 2 * 60 * 1000,
        skipMiddlewares: true
    }
});

// 监听客户端连接事件
// 1. socket表示连接到客户端的socket对象
// 2. io表示整个Web服务
// 3. socket.on 表示注册某个事件
// 4. socket.emit 表示触发事件
io.on('connection', socket => {

    //  监听客户端发送的消息
    /*
    * params1：事件名任意
    * params2：接收到的数据
    * */
    // 201 用户自己的信息
    // 202 其他用户发送的消息
    socket.on('my_message', data => {
        socket.emit('send', {
            ...data,
            code: 201
        }); // 浏览器注册send事件 触发send事件
        io.emit('other', {
            ...data,
            code: 202
        })
    })

    // 注册登录事件
    socket.on('login', data => {
//         判断用户是否已经登录
        const isLogin = userList.find(item => item.username === data.username);
        if (isLogin) {
            socket.emit('res_login', {
                code: 1,
                msg: '用户名已存在'
            })
            return
        } else {
            userList.push(data)
            socket.emit('res_login', {
                code: 0,
                msg: '登录成功'
            })
            // 200 新用户加入群聊的信息
            io.emit('new-user', {
                code: 200,
                message: `${data.username} 加入群聊`
            })

            socket.username = data.username
            socket.avatar = data.avatar
            socket.detail = data.detail
        }
        console.log(userList)
    })

    // 广播用户列表
    socket.on('list', () => {
        io.emit('userList', userList);
    })

    // 用户断开连接事件
    socket.on('disconnect', (err) => {

        console.log(err)
        if (socket.username) {
            const index = userList.findIndex(item => item.username === socket.username);
            if (index !== -1) {
                userList.splice(index, 1);
                io.emit('userList', userList);
                console.log(`${socket.username} 已断开连接`);
                io.emit('new-user', {
                    code: 200,
                    message: `${socket.username} 退出群聊`
                });
            }
        } else {
            console.warn('尝试移除未定义的用户');
        }
    });

// 注册图片事件
    socket.on('sendImage', data => {
        console.log(data)
        // 广播给所有用户
        io.emit('other', {
            ...data,
            code: 202
        })

        socket.emit('send', {
            ...data,
            code: 201
        })
    })
});


httpServer.listen(3000, () => console.log('服务器启动成功'));
